package br.unicarioca.viaexpositus

class PublicController {

    def sistemaAdm = { }
    def mapeamentoSite = { }
    def ordenacaoPrioridade = { }
    def designacaoTrabalho ={ }
    def mapaVisual = { }
    def avaliacaoElet = { }
    def avaliacaoHum = { }
    def relatorioAcess = { }
    def tutorialAjuste = { }
    def bancoAval = { }
    def listaDeFuncionalidades = { }
    def funcionamento = { }
    def tecnologias = { }
    def authenticateService

    def cadastroOrganizacao = {
        def organizacaoInstance = new Organizacao()
        return [organizacaoInstance: organizacaoInstance]
    }

    def salvarOrganizacao = {
        def organizacaoInstance = new Organizacao(params)
        organizacaoInstance.nome = params.organizacao.nome

        def usuarioInstance = new Usuario(params)
        usuarioInstance.nome = params.usuario.nome
        usuarioInstance.ativo = true
        usuarioInstance.senha = authenticateService.encodePassword(params.senha)
        usuarioInstance.confirmacaoSenha = authenticateService.encodePassword(params.confirmacaoSenha)

        def perfil = Perfil.findByNome(Perfil.PERFIL_ORGANIZACAO)

        Perfil novoPerfil = new Perfil()
        novoPerfil.listaDePermissoes = []
        novoPerfil.nome = organizacaoInstance.nome
        novoPerfil.descricao = "Este é o perfil do administrador da organização."
        novoPerfil.gerarCodeNome()

        perfil.listaDePermissoes.each{
            it.perfil = it.perfil+","+novoPerfil.codenome
            novoPerfil.listaDePermissoes << it
        }

        usuarioInstance.perfis = []
        usuarioInstance.perfis << novoPerfil

        usuarioInstance.organizacao = organizacaoInstance

        novoPerfil.usuarios = []
        novoPerfil.addToUsuarios(usuarioInstance)

        if(usuarioInstance.validate() && organizacaoInstance.validate()){
            if (organizacaoInstance.save(flush: true)/* && usuarioInstance.save(flush: true)*/ && novoPerfil.save(flush:true) ) {
                usuarioInstance.save(flush: true)
                organizacaoInstance.administrador = usuarioInstance
                authenticateService.clearCachedRequestmaps()
                flash.message = "${message(code: 'default.created.message', args: [message(code: 'organizacao.label', default: 'Organizacao'), organizacaoInstance.id])}"
                redirect(controller:"inicial", action: "index")
            } else {
                render(view: "cadastroOrganizacao", model: [organizacaoInstance: organizacaoInstance, usuarioInstance: usuarioInstance])
            }
        } else {
            render(view: "cadastroOrganizacao", model: [organizacaoInstance: organizacaoInstance, usuarioInstance: usuarioInstance])
        }

    }
}

